package com.example.vv.domain.qv;

import com.example.vv.domain.qv.enu.JoinSceneEnum;
import com.example.vv.domain.qv.enu.MemberTypeEnum;
import com.example.vv.domain.qv.enu.NeedNameEnum;
import com.example.vv.domain.qv.enu.StatusFilterEnum;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 描述：客户群
 *
 * @author w.dehai.2024/7/26.14:38
 */
public class ClientGroupDTO implements Serializable {

    /**
     * 客户群列表请求
     */
    @Data
    public static class ListReq implements Serializable {
        /**
         * 客户群跟进状态过滤
         */
        private StatusFilterEnum statusFilter;
        /**
         * 群主过滤
         */
        private OwnerFilter ownerFilter;

        /**
         * 用于分页查询的游标，字符串类型，由上一次调用返回，首次调用不填
         */
        private String cursor;

        /**
         * 分页，预期请求的数据量，取值范围 1 ~ 1000
         */
        private Integer limit;

        @Data
        public static class OwnerFilter implements Serializable {
            /**
             * 用户ID列表。最多100个
             */
            private String[] useridList;
        }
    }

    /**
     * 客户群列表响应
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class ListResp extends QvBaseResp implements Serializable {
        /**
         * 客户群列表
         */
        private List<GroupChatList> groupChatList;

        /**
         * 分页游标，下次请求时填写以获取之后分页的记录。如果该字段返回空则表示已没有更多数据
         */
        private String nextCursor;

        @Data
        public static class GroupChatList implements Serializable {
            /**
             * 客户群ID
             */
            private String chatId;
            /**
             * 客户群跟进状态
             */
            private StatusFilterEnum status;
        }
    }

    /**
     * 客户群详情请求
     */
    @Data
    public static class DetailReq implements Serializable {
        /**
         * 客户群ID
         */
        private String chatId;

        /**
         * 是否需要返回群成员的名字
         */
        private NeedNameEnum needName;
    }

    /**
     * 客户群详情响应
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class DetailResp extends QvBaseResp implements Serializable {
        /**
         * 客户群ID
         */
        private String chatId;
        /**
         * 群名
         */
        private String name;
        /**
         * 群主ID
         */
        private String owner;
        /**
         * 群的创建时间
         */
        private long createTime;
        /**
         * 群公告
         */
        private String notice;
        /**
         * 群成员列表
         */
        private List<Member> memberList;
        /**
         * 群管理员列表
         */
        private List<Admin> adminList;
        /**
         * 当前群成员版本号
         */
        private String memberVersion;

        @Data
        public static class Admin implements Serializable {
            private String userId;
        }

        public static class Invitor extends Admin implements Serializable {}

        @Data
        @EqualsAndHashCode(callSuper = true)
        public static class Member extends Admin implements Serializable {
            /**
             * 成员类型
             */
            private MemberTypeEnum type;
            /**
             * 入群时间
             */
            private long joinTime;
            /**
             * 入群方式
             */
            private JoinSceneEnum joinScene;
            /**
             * 邀请者。目前仅当是由本企业内部成员邀请入群时会返回该值
             */
            private Invitor invitor;
            /**
             * 在群里的昵称
             */
            private String groupNickname;
            /**
             * 名字。仅当 need_name = 1 时返回
             * 如果是微信用户，则返回其在微信中设置的名字
             * 如果是企业微信联系人，则返回其设置对外展示的别名或实名
             */
            private String name;
        }
    }
}
